﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using AdminCondominio.Persistencia;
using AdminCondominio.Dominio;

namespace AdminCondominio.Pruebas
{   
    [TestFixture]
    public class TestUsuarioDAO
    {
        private UsuarioDAO  usuarioDAO= new UsuarioDAO();

        [Test]
        public void  TestCrear() 
        {
            Usuario nuevoUsuario = new Usuario();
            nuevoUsuario.NoUsuario = "Devirtual2";
            nuevoUsuario.NoTipoUsuario = "Admin";
            nuevoUsuario.NoCorreo = "alex2@devirtual.com";
            nuevoUsuario.TxClave = "12345";

            if (usuarioDAO.obtener(nuevoUsuario.NoCorreo) == null)
            {
                Assert.DoesNotThrow(delegate
                {
                    usuarioDAO.crear(nuevoUsuario);
                });
            }
            else
            {

                Assert.Catch<Exception>(delegate
                {
                    usuarioDAO.crear(nuevoUsuario);
                });
            }
            
        
        }
        [Test]     
        public void TestObtener()
        {
            String noCorreo = "alex@devirtual.com";
            Usuario usuarioObtenido = usuarioDAO.obtener(noCorreo);
            Assert.NotNull(usuarioObtenido);
            Assert.AreEqual(noCorreo, usuarioObtenido.NoCorreo);
        }
        [Test]
        public void TestModificar()
        {
            Usuario usuarioModificar = new Usuario();
            usuarioModificar.NoUsuario = "Devirtual";
            usuarioModificar.NoTipoUsuario = "User";
            usuarioModificar.NoCorreo = "alex2@devirtual.com";
            usuarioModificar.TxClave = "789";

            if (usuarioDAO.obtener(usuarioModificar.NoCorreo) != null)
            {
                if (usuarioDAO.ObtenerUsuarioConCorreoRepetido(usuarioModificar.NoUsuario,usuarioModificar.NoCorreo) == null)
                {
                    Assert.DoesNotThrow(delegate
                    {
                        usuarioDAO.modificar(usuarioModificar);
                    });
                }
            }
           // Usuario usuarioObtenido = usuarioDAO.modificar(usuarioModificar);
           // Assert.AreEqual(usuarioModificar.NoCorreo,usuarioObtenido.NoCorreo);
        }
        [Test]
        public void TestEliminar()
        {
            Usuario usuarioEliminar = new Usuario();
            usuarioEliminar.NoCorreo = "alex@devirtual.com";
            Assert.DoesNotThrow(delegate
            {
                usuarioDAO.eliminar(usuarioEliminar);
            });
        }
        [Test]
        public void TestListar()
        {
            String nousuario= "";
            List<Usuario> ListaUsuario = new List<Usuario>();
            ListaUsuario = usuarioDAO.ListarUsuario(nousuario);
            Assert.IsNotNull(ListaUsuario);
            Assert.GreaterOrEqual(ListaUsuario.Count, 0);
            
          
        }
    }
}